package interfacesFerrovia;

public interface DefsGlobais {
/**
 * Definicoes globais (enumeracoes, constantes, etc.	
 * @author Fernando Vanini
 *
 */
	
	/**
	 *  Define os tipos de elementos da malha ferroviaria.
	 */
	public enum TipoElemento { COMPOSICAO, TRECHO, SENSOR, CHAVE }
	
	/**
	 *  Define os tipos possiveis de falhas. 
	 */
	public enum TipoFalha { ELETRICA, MECANICA, FREIO, ACELERACAO, GERAL, INDEFINIDA }
	
	
	/**
	 * Define os atributos para cada um dos elementos da rede.
	 * Convencoes para os valores dos atributos:
	 *     - tempos: inteiros, representando segundos.
	 *     - distancia: float, representando metros.
	 *     - velocidade: float, representanto m/s 
	 *     - aceleracao e frenagem : float, representanto m/s/s (cada uma sempre >= 0)
	 *     
	 * Convencoes para sentido da velocidade (trecho e chave):
	 * 		- velocidade > 0  ==>  sentido A->B
	 *      - velocidade < 0  ==>  sentido B->A
	 * 	
	 * Convencoes para os trechos e composicoes
	 *     - posicao da composicao: 
	 *     		- extremidade A do trecho --> posicao == 0
	 *     		- extremidade B do trecho --> posicao >= distancia do trecho
	 */
	public enum TipoAtributo{
		// atributos fixos, comuns a todos os elementos 
		ID,   // identificacao de um elemento da malha ferroviaria              [ Valor: String  ]
		TIPO, // tipo do elemento                                               [ Valor: TipoElemento ]
		
		// atributos especificos de uma composicao
		// -- fixos --
		COMPRIMENTO,       // comprimento da composicao.                        [ Valor: Integer  ]
		VELOCIDADE_MAX,    // velocidade maxima da composicao                   [ Valor: Float    ]
		ACELERACAO_MAX,    // aceleracao maxima.                                [ Valor: Float    ]
		FRENAGEM_MAX,      // frenagem maxima.                                  [ Valor: Float    ]
		ITINERARIO,        // itinerario.                                       [ Valor: String[] ]
		PARTIDA,           // instante da partida (inicio da viagem)            [ Valor: Integer  ]
		// -- variaveis ---
		ID_TR_CH_ATUAL,    // id. do trecho ou chave atual.                     [ Valor: String  ]
		POSICAO_ATUAL,     // posicao atual (num trecho).                       [ Valor: Float   ]
		VEL_ATUAL,         // velocidade atual.                                 [ Valor: Float   ]
		SENTIDO_ATUAL,     // sentido (AB=>true, BA => false)                   [ Valor: Boolean ]
		ACEL_ATUAL,        // aceleracao atual.                                 [ Valor: Float   ]
		FREN_ATUAL,        // taxa de frenagem atual.                           [ Valor: Float   ]
		EM_MOVIMENTO,      // true => composicao em movimento.                  [ Valor: Boolean ]
		
		// atributos especificos de um trecho
        // -- fixos --		
		DISTANCIA,         // Distancia entre as extremidades                   [ Valor: Float   ]
		ID_TR_CH_A,        // identificacao da chave conectada a extremidade A  [ Valor: String  ]
		ID_TR_CH_B,        // identificacao da chave conectada a extremidade B  [ Valor: String  ]
		// N_SENSORES,     // numero de sensores do trecho (eliminado 31/03)    [ Valor: Integer ]
		// -- variaveis --
		N_COMPOSICOES,     // numero de composicoes trafegando pelo trecho      [ Valor: Integer ]
		
		// atributos especificos de uma chave
		// -- fixos --
		TRECHOS_A,         // trechos conectaveis a extremidade A.              [ Valor: String[] ]
		TRECHOS_B,         // trechos conectaveis a extremidade B.              [ Valor: String[] ]
		TEMPO_MUDANCA,     // tempo de mudanca de estado.                       [ Valor: Integer  ]
		// DISTANCIA,      // herdado de Trecho                                 [ Valor: Integer  ]
		//TEMPO_PASSAGEM,  // tempo de passagem pela chave  (eliminado)         [ Valor: Float    ]
		// -- variaveis --
		EM_MUDANCA,        // true => em mudanca de estado.                     [ Valor: Boolean  ]
		//TR_ATUAL_A,      // trecho atual na extremidade A (herda de Trecho)   [ Valor: String   ]
		//TR_ATUAL_B,      // trecho atual na extremidade B (herda de Trecho)   [ Valor: String   ]
		TEMPO_CONCLUSAO    // tempo p/ concluir a mudanca em curso              [ Valor: Integer  ] 
	}	
		

}